/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hoja4;

/**
 *
 * @author asus
 */
public abstract class AbstractStack<E> {
     /**
     * Regresa el tamaño de la pila
     * @return size: Tamaño de la pila
     */
    public abstract int size();
    
    /**
     * Agrega un elemento hasta arriba del stack
     * post: El parámetro fue añadido hasta arriba del stack
     * @param item: Elemento a agregar
     */
    public void add(E item) {
        push(item);
    }

    /**
     * Agrega un elemento hasta arriba del stack
     * post: El parámetro fue añadido hasta arriba del stack
     * @param item: Elemento a agregar
     */
    public abstract void push(E item);

    /**
     * Elimina el elemento hasta arriba de la pila
     * post: El elemento hasta arriba de la pila fue eliminado
     * @return objeto: Elemento eliminado
     */
    public abstract E remove();

    /**
     * Saca el último elemento de la pila
     * pre: size > 0
     * post: Devuelve el elemento hasta arriba de la pila, que también fue eliminado
     * @return objeto: Último objeto de la pila
     */
    public abstract E pop();
    
    /**
     * Devuelve el último objeto de la pila
     * pre: size > 0
     * post: Devuelve el elemento hasta arriba de la pila. No es eliminado.
     * @return objeto: Último objeto de la pila 
     */
    public abstract E get();

    /**
     * Devuelve el último objeto de la pila
     * pre: size > 0
     * post: Devuelve el elemento hasta arriba de la pila. No es eliminado.
     * @return objeto: Último objeto de la pila 
     */
    public E getFirst() {
        return get();
    }
    
    /**
     * Devuelve el último objeto de la pila
     * pre: size > 0
     * post: Devuelve el elemento hasta arriba de la pila. No es eliminado.
     * @return objeto: Último objeto de la pila 
     */
    public E peek() {
        return getFirst();
    }

    /**
     * Devuelve verdadero si la pila está vacía
     * @return true Si la pila está vacía
     */
    public abstract boolean empty();
    
}
